Análisis de la siniestralidad en accidentes de automóviles en Canada

El objetivo general del presente proyecto es la creación de un modelo de Machine Learning para su posterior puesta en producción con el objetivo de predecir la probabilidad de fallecimiento ante un accidente de tráfico dado una serie de condicionantes o características. Esta predicción permite a la aseguradora calcular la posible provisión de fondos que está obligada a bloquear para hacer frente a las indemnizaciones por accidente.

Como base de entrenamiento de los modelos se utilizará un dataset de accidentes de tráfico de Canadá entre 1994 y 2014.

Metología:

Antes de comenzar el análisis, importamos las librerías:

Importación de librería que van a ser usadas durante el desarrollo del proyecto.

Diccionario de Datos

Análisis Exploratorio de los Datos

Inicio de carga de datos del dataset, que incluye información sobre los accidentes de tráfico ocurridos en Canadá entre 1994 y 2014.

El dataset que se está usando relaciona accidente con un conjunto de variables que se configuran en tres niveles:

Las variables resultan, en su amplia mayoría, categóricas y se encuentran previamente codificadas con coódigos numéricos. Esta circunstancia va a obligar a realizar cambios de encoding para eviter sesgos ante etiquetas con valores numéricos más elevados.

A nivel general, encontramos 22 columnas, correspondientes a los distintos elementos de los niveles y 5.860.404 inputs.

Con objeto de alcanzar el fin del proyecto, a priori, se utilizará como variable objetivo C_SEV; no obstante se realizará análisis mas detallado de dicha variable para ratificar esta decisión. De igual forma, se observa conveniente prescindir en este punto de P_ISEV, puesto que es una variable que se configura o que encuentra sentido a futuro y no en el momento del accidente (las necesidades medicas son una circunstancia futura). Esta decisión también se ratificará durante análisis exploratorio más detallado.

Sobresalen las variables de tipo object, lo que obligará a transformaciones y encoding posteriores.

Análisis generales de la tabla

Se procede al borrado de posibles filas duplicadas. No aparecen columnas duplicadas.

Lo anterior confirma la existencia de filas duplicadas que, tras su borrado, confuigura el nuevo dataset con 5.860.405 inputs.

Análisis de la variable objetivo

La variable objetivo C_SEV incluye la siguiente información:

Puesto que nos encontramos en un problema de clasificación, observamos como los fallecimientos poseen menores datos en la clase de fallecimientos y que va a generar problemas en el entrenamiento de la máquina.

Para conseguir que los modelos generalicen bien se procederá al balanceo de estos datos a través de selección de diversas estrategias.

A la luz de la gráfica, el 98.32% del dataset incluye accidentes en el que no se ha producido ningun fallecimiento, frente al 1.68%. Se debe tener en cuenta que, por la configuración del dataset, existen variables dummies en las que los vehículos no involucran a personas, lo que puede aumentar considerablmente la circunstancia de no fallecidio.

Exploración de valores nulos

Exploramos la posible exiatencia de valores nulos.

Se debe tener en cuenta que,a pesar de la poca presencia de valores nulos, existen otras clases etiquetadas con códigos no numéricos que, en general aumentan el peso del dataset pero no conceden información relevante al modelo, bien por aglutinar otras variables o por que indican la inexistencia de información. Se procede, en la mayoría de los casos a tratarlos como valores NAs para su posterior tratamiento.

Volvemos a contar los valores nulos de nuestro dataset.

Exploración gráfica de la tabla

A continuación se realiza exploración gráfica que permite relacionar los datos que tenemos con posibles circunstancias o casuísticas de un accidente. Todas ellas permiten a la compañia conocer que variables influyen más en la causación de accidentes y tomar decisiones en cuanto a posibles bonus, primas y provisiones necesarias. Se ha configurado este bloque como un conjunto de cuestiones que pueden ser anlizadas desde los datos ofrecidos por el dataset

¿Existe algun condicionante que determine un mayor número de accidentes?

Variable C_MNTH

Observamos como los mayores accidentes se producen en los meses de verano, probablemente por la mayor movilidad que se desarrolla durante este periodo. De la misma forma destaca Enero y Diciembre, en los que puede inferirse un mayor número de accidentes como consecuencia de la movilidad mayor por las fiestas navideñas o por las peores inclemencias climatóligas de los meses de invierno. Las inclimencias meteorológicas pueden causar mayor número de accidentes derivado de ellas mismas y/o a la mayor movilidad asociada a estas cuando acontecen

Variable C_WDAY

Graficamos el número de accidentes que se producen semanalmente

Otro aspecto relevante es que el mayor numero de accidentes se produce los viernes, probablemente también derivado de la mayor movilidad que se produce este día

Variable C_HOUR

El pico de accidentes de tráficos se situa entre las 15:00 horas y las 17:00 horas y que se asocia con las mayores cuotas de movilidad en dicho periodo a consecuencia terminación de la jornada laboral y de la terminación de clases lectivas en centros educativos.

¿La configuración o estado de la carretera es determinante en los accidentes?

Variable C_RCFG

Resulta relevante el análisis exploratorio de la configuración de la carretera para conocer como ésta interfiere en los accidentes. En este caso se estudian los valores absolutos la fatalidad en función de la configuración y los porcentajes de mortalidad asociados a ambas variables.

A continuación, ploteamos la variable de severidad en función del tipo de configuración de carretera.

Observamos como el mayor numero de accidentes se produce en las medianas y en las intersecciones, sin embargo, el porcentaje de mortalidad en este caso es relativamente bajo con respecto a los cambios de rasante, donde el porcentaje de mortalidad es mayor. Esto quiere decir que la posibilidad de ocurrencia de un accidente en cambio de rasante es baja pero que, de producirse, posee altas probabilidades de resultar mortal.

¿Existe algún tipo de vehículo con mayor propensión a la ocurrencia de accidentes?

Variable V_TYPE

La variable V_TYPE da información sobre el tipo de vehículo involucrado en el accidente.

Se observa que los vehículos con mayor numero de accidentes son los ligeros, no obstante se proceda a graficar los datos de manera detallada.

En términos relativos, las mayores cuotas de siniestralidad con fallecidos tienen lugar en accidentes con vehículos de granja (19) y en autocaravanas homologadas (20). Este porcentaje de siniestralidad puede encontrar sentido a consecuencia del no uso de elementos de seguridad apropiados o de la no adaptación apropiada. En términos absolutos, el mayor número de accidentes deriva de camiones y furgonetas y que encuentra causa en una posible mayor movilidad de este tipo de vehículos comom consecuencia del transporte de mercancias terrestre.

Variable P_ISEV

P_ISEV da información sobre el alcance del accidente. En este caso, teniendo en cuenta el dataset, el número de fallecidos (3) es 40.347 personas, mientras que el número de heridos asciende hasta 3.070.875 personas. La variable N hace mención a los coches aparcados.

Cabe destacar la diferencia con respecto a C_SEV, que agrupa por accidentes

¿Los elementos de seguridad son un elemento determinante en la seguridad de los conductores y el resto de ocupantes?

Variable P_SAFE

Si analizamos los accidentes en función de los elementos de seguridad se observa, de forma lógica, como los accidentes en los que no existen elementos de seguridad, la letalidad es mayor

¿La posición de la persona y/o ocupante influye en la siniestralidad?

Variable P_USER

La mayor siniestralidad se encuentra en los conductores en térmonos absolutos, llegando a valores parecidos con los pasajeros; sin embargo, la letalidad resulta mayor en los pasajeros que en los conductores. Cabe destacar también el alto porcentaje de mortalidad en el caso de peatones y de motorista y que encuentra lógica como consecuencia de los menores elementos de seguridad y la mayor desprotección frente accidentes.

¿La situación climatológicas pueden condicionar los accidentes y la letalidad de los mismos?

Variable C_WTHR

La siniestralidad con respecto al clima indica que, en términos absolutos del dataset, han existido más accidentes en días soleados, sin embargo, este dato contrasta con el valor en términos relativos de mortalidad, alcanzando los porcentajes más bajos del conjunto de variables asociadas al tiempo. Se debe destacar también que los accidentes en días de niebla y de viento poseen el porcentaje más elevado de accidentes mortales del conjunto de datos disponibles.

Realación entre variable C_WTHR y C_RSUR

El gráfico anterior relaciona las condiciones climatológicas y el estado de la carretera. Se observsa como, de forma lógico, las buenas condiciones climatóligas generan un mejor estado de la carretera.

¿La antiguedad del vehículo es determinante en la siniestralidad y en la mortalidad de los accidentes?

Para este caso vamos a analizar una nueva variable derivada de C_YEAR y de V_YEAR con objeto de determinar la edad del vehículo en el momento del accidente. Esta vriable necesita un tratamiento previo en cuanto a transformación, tratamiento de NAs y diferencias que serán usado solo para el graficado.

El gráfico arroja información sobre diversos aspectos. En primer lugar, podemos concluir que Canadá tiene un parque móvil relativamente nuevo, con mayores numeros de accidentes asociados a coches con una antiguedad menor a 10 años. Además, se observa un descenso paulatino en el número de accidentes a partir de coches con una antiguedad de 12-15 años, lo que transfiere información sobre la media de vida útil de los vehículos del parque móvil de Canadá. Finalmente, el gráfico también arroja información sobre la mortalidad en función del año de antiguedad del vehículo.

Relacionando esto con negocios aseguradores, no se observan datos suficientes a proiori que permitan justificar la posible imposición de primas o de bonus en relación a la antiguedad del vehículo, lo que si se extrae de la gráfica es que la mortalidad aumenta abrupatamente a partir de vehículos que tengan una antiguedad mayor de 29 años, lo que si justifica la posible existencia de mayores primas.

¿Que características asociadas a los conductores influyen en la causación de un accidente?

Puede observarse como la mortalidad asociada a los accidentes sigue una relación directa al aumento de la edad. El gráfico anterior filtra por conductores mayores de 18 años involucrados en un accidente y evidencia cómo conforme aumenta la edad, la mortalidad resulta mayor. A efectos de la aseguradora, entendemos que se justifica una mayor prima en pólizas en las que el asegurado conductor tenga una edad más avanzada, sobre todo en el tramos a partir de 50 años.

Sorprendemente si analizamos la edad en función de los accidentes aparece un pico de fallecimientos entre entre los 12 y los 16 años. Se ha analizado la legislación de tráfico de Canada encontrando que en algunos estados como Alberta o Nuevo Brunswick, las licencias de moto se conceden a partir de esta edad, lo que podría explicar dichos accidentes.

Tratamiento de los datos

Preprocesamiento de variables

Como el objetivo principal del modelo es saber si en un accidente se van a producir o no fallecimientos, en las variables donde se identifica a la persona, los datos que pertenecen a coches, es decir, todos aquellos accidentes entre una persona y un coche aparcado, no nos sirven. Por ello, procedemos a eliminarlos.

Variable P_SEX

Se considera adecuado y relevante mantener la variable P_SEX, en cuyo caso es necesa realizar transformación y prescindir de valores que no resulten de los etiquetados hombre/mujer.

Variable P_ID

Las etiquetas NN de la variables ID no nos trasladan ningún tipo de información al modelo por lo que se va a prescindir de ella. La variable ID, aunque se conoce el poco peso por la variabilidad de los datos, se mantiene para posterior eliminado.

Variable P_PSN

La variable P_PSN indica el lugar ocupado por la persona en el momento del accidente, circunstancia que lleva a prescindir de aquellas que estén etiqueta con NN por no incorporar ningún tipo de información. El resto de datos se mantienen para codificación posterior por considerarse relevantes.

Variable P_ISEV

La variable P_ISEV se considera redundante respecto a la variable objetivo, lo que nos lleva a prescindir de ella. Además, ésta mezcla información respecto a daños en vehículos, por lo que se considera apropiado su eliminación.

Variable P_SAFE

P_SAFE muestra información sobre el elemento de seguridad que tiene protagonismo en el accidente. Se ha demostrado mediante representación gráfica que los accidentes con menor mortalidad son aquellos en los que los elementos de seguridad están presente, por lo que se mantiene como variable predictora del modelo. No obstante, el peso de las variables incorporadas al conjunto de modelos serán analizadas en el posterior bloque de interpretabilidad

Variable P_USER

La variable P_USER determina si la persona accidentada resultaba conductora, motorista, peatón, ciclista. Se considera el peso que tiene dicha variable predictora, por lo que no se considera óptimo ni adecuadon su agrupación o eliminado.

Tras la eliminación de columnas realizamos test para comprobar la configuración de la variable objetivo, observándose que no han existido cambios relevantes en la configuración inicial. Aún así se observa necesario la realizar rebalanceo para alcanzar un entrenamiento óptimo.

Se prescinde en V_TYPE y V_YEAR de etiquetas que no conceden información

Nueva variable C_V_YEAR

Se ha observado que el año de antiguedad del vehículo influye notablemente en la siniestralidad, por lo que se considera adecuado incluir dichas variables en los modelos como posible variable predictora. En este caso el tratamiento de valores NAs resulta más caprichoso porque la asignación de un valor medio del conjunto del dataset nos podría llevar a valores negativos o outlier como consecuencia de asignar valores no acordes con la realidad y que se derivan de computar la diferencia entre ambas variables.

Una vez que se ha obtenido la nueva variable se procede a prescindir de ambas

Matriz de correlaciones

Realizamos aqui la matriz de correlaciones despues de la transformacion para poder ver la correlacion de todas las variables en su forma definitiva

Codificación de variables

Puesto que incluimos en el conjunto de variables categóricas, se opta por realizar una codificación basada en la media y que tiene efectos óptimos para la clasificación en base a árboles de decisión. En este caso la codificación se realiza determinando la probabilidad de que un determinado dato pertenezca a una de las clases y usando dicha probabilidad como etiqueta.

Se han realizado pruebas con codificación One Hot Encoding, no obteniendo resultados óptimos. Además, se incluyen un número delimitado de variables que no incluyen las temporales, puesto que van a ser objeto de Cyclical encoding.

Mean Encoding

Cyclical Encoding

El dataset incluye tres variables numéricos correspondientes a día del mes, mes y año. Dichas variables, de no ser codificadas dará mayor peso a aquellas variables temporales con números más elevadas que a aquellas que tienen números bajos. Así por ejemplo, un accidente en la hora 23 podría tener más peso a ojos de computación que otro que se produce enb la hora siguiente (hora 00). Ante esto es necesario transformar los valores a través de funciones con comportamiento cíclicos. Esto mismo resulta extrapolable a meses y a los años, teniendo más peso los accidentes producidos en años cercanos a 2014 que aquellos ocurridos en años cercanos a 1994.

Se prescinde de variables que han sido utilizadas durante Cyclical Encoding

Imputación de valores missing Variable C_MNTH

Para el caso de los meses se opta por rellenar el valor con el valor del mes anterior. El objetivo de esta estrategia es minimizar riesgos de equivocación por lo que se considera que la probabilidad de error se minimiza derivado de la alta probabilidad de que el accidente en cuestión se sitúe en dicho rango temporal.

Matriz de correlaciones

Volvemos a pintar la matriz de correlacion tras el encoding para ver, ahora si, la correlacion entre todas las variables explicativas del dataset.

Como vemos, la variable mas correlacionada con la variable objetivo es P_ISEV, algo que es entendible ya que esta variable nos indica el tratamiento medico a posteriori del accidente. La segunda con mayor correlacion es C_CONF que nos indica como ha sido la colision en el accidente, lo cual tambien es entendible que tenga mucha relacion con si hay o no fallecidos en dicho accidente.

Separación en train y test

Realizamos, una vez hechas las transformaciones, sepación entre train y test, con un porcentaje de test del 30%.

Tratamiento de NA's en Train

Puesto que las variables temporales han sido codificadas se opta por rellenar los valores NAs con la moda de los datos. En este caso,puesto que tras la codificación se ha generado un par de datos, se considera que la moda de las nuevas variables que conforman los Senos y Cosenos de las variables primitivas se corresponden con la moda de aquellas.

Tratamiento de NA's de TEST

Puesto que las variables temporales han sido codificadas se opta por rellenar los valores NAs con la moda de los datos. En este caso,puesto que tras la codificación se ha generado un par de datos, se considera que la moda de las nuevas variables que conforman los Senos y Cosenos de las variables primitivas se corresponden con la moda de aquellas.

La forma en la que se van a los días de la semana y las horas es agrupando por día de la semana y asignando la moda. Así, por ejemplo, en el caso de las horas, se asignará la moda conforme al día de la semana en el que se sitúe el missing value.

Escalado

Antes de llevar a cabo el Oversampling, vamos a realizar el escalado de las variables estandarizando los valores quitandoles la media y escalandolos a la varianza unitaria.

Tras el escalado, eliminamos 3 variables que no queremos para introducir en los modelos.

Por un lado están P_ID y V_ID que son variables identificatorias tanto de vehiculos(V_ID) como de personas(P_ID) por lo que no tienen un valor explicativo de la variable objetivo.

Por otro lado tenemos P_ISEV que es el tratamiento medico requerido tras el accidente, algo que, al ser a posteriori, no nos ofrece un valor explicativo de la variable objetivo. Aun así sabemos que tendrá una alta correlacion con la variable target ya que, a mayor gravedad del accidente, mayor tratamiento medico requerira el paciente.

Oversampling

El desbalanceo de datos que se ha puesto de manifiesto anteriormente y que podría generar problemas en la generación al entrenar la máquina se corrige mediante estrategia de oversampling. En este caso la estrategia que se ha seguido es con el algoritmo SMOTE que utiliza un enfoque de sobremuestreo en el que la clase minoritaria es sobremuestreada creando ejemplos sintéticos en lugar de sobremuestrear con sustituciones

Guardamos los datos